/*  ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 
*   Copyright 2014 Jan-Marwin Wollschläger                                   *
*                                                                            *
*   Licensed under the Apache License, Version 2.0 (the "License");          *
*   you may not use this file except in compliance with the License.         *
*   You may obtain a copy of the License at                                  *
*                                                                            *
*       http://www.apache.org/licenses/LICENSE-2.0                           *
*                                                                            *
*   Unless required by applicable law or agreed to in writing, software      *
*   distributed under the License is distributed on an "AS IS" BASIS,        *
*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
*   See the License for the specific language governing permissions and      *
*   limitations under the License.                                           *
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **   */  

public class BoundingRectangle implements IBoundingRectangle
{
	Pair pos;
	Pair dim;
	
	public BoundingRectangle(Pair pos, Pair dim)
	{
		assert dim.getX() >= 0;
		assert dim.getY() >= 0;
		assert pos.getX() >= 0;
		assert pos.getY() >= 0;
		
		this.pos = pos; this.dim = dim;
	}
	
	/**
	* Returns The x,y - coordinates of this bounding rectangle, e.g.
	* where this widget is located. 
	**/
	public Pair getPosition()
	{
		return pos;
	}
	
	/**
	* Sets the new position for this bounding rectangle, e.g. where
	* this widget will be located.
	* @param pos The new x,y - coordinates for this instance.
	**/
	public void setPosition(Pair pos)
	{
		this.pos = pos;
	}
	
	/**
	* The dimensions of this instance, e.g. width, height. 
	**/ 
	public Pair getDimensions()
	{
		return dim;
	}
	
	/**
	* The upper left corner as a Pair.
	**/
	public Pair getUpperLeftCorner()
	{
		return pos;
	}
	
	/**
	* The lower right corner as a Pair.
	**/
	public Pair getLowerRightCorner()
	{
		return new Pair(pos.getX()+dim.getX(),pos.getY()+dim.getY());
	}
	
	/**
	* Checks if the specified point (x,y) lies in this 
	* bounding rectangle, returns false otherwise.
	* @param point The point to check.
	* @return True if point is contained in this instance, 
	* false otherwise
	**/
	public boolean containedIn(Pair point)
	{
		return point.getX() >= pos.getX() && point.getY() >= pos.getY()	
		&& point.getX() <= pos.getX()+dim.getX() 
		&& point.getY() <= pos.getY()+dim.getY();
	}	
	
	/**
	* Checks if the specified point (x,y) lies in this 
	* bounding rectangle, returns false otherwise.
	* @param point The point to check.
	* @return True if point is contained in this instance, 
	* false otherwise
	**/
	public boolean containedIn(Vector2 point)
	{
		return point.getX() >= pos.getX() && point.getY() >= pos.getY()	
		&& point.getX() <= pos.getX()+dim.getX() 
		&& point.getY() <= pos.getY()+dim.getY();
	}
}
